package br.com.unirio.formula1.servico;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * Classe que representa uma Classificacao Geral de Pilotos. E o produto final gerado pela aplicacao.
 * E composta de uma lista ordenada de {@link ColocacaoPiloto}, que representa cada colocado da classificacao.
 * 
 * 
 * @author Victor
 * 
 */
public class ClassificacaoPiloto
{

    List<ColocacaoPiloto> colocados;

    public ClassificacaoPiloto()
    {
    }

    public void addColocacao(ColocacaoPiloto c)
    {
	if (colocados == null)
	    colocados = new ArrayList<ColocacaoPiloto>();
	colocados.add(c);
    }

    public List<ColocacaoPiloto> getColocados()
    {
	return this.colocados;
    }

    /**
     * Metodo que ordena os colocados da classificacao utilizando o comparator que implementa os criterios de ordenacao
     * e desempate entre colocados ({@link ColocacaoPilotoComparator}).
     * 
     */
    public void ordenar()
    {
	Comparator<ColocacaoPiloto> cp = ColocacaoPilotoComparator.getComparator();
	Collections.sort(colocados, cp);
    }

    public void ordenarPorPosicoes()
    {
	Collections.sort(colocados);
    }

    public void atribuirPosicoes()
    {
	int i = 1;
	for (ColocacaoPiloto colocado : colocados)
	{
	    colocado.setPosicao(i);
	    i++;
	}
    }

    public ColocacaoPiloto getColocado(int i)
    {
	for (ColocacaoPiloto colocado : colocados)
	{
	    if (colocado.getPosicao() == i)
		return colocado;
	}
	return null;
    }

    @Override
    public String toString()
    {
	StringBuilder builder = new StringBuilder();
	for (ColocacaoPiloto colocado : colocados)
	{

	    builder.append(colocado.getPosicao() + " - " + colocado.getPiloto().getNome() + " "
		    + colocado.getPiloto().getSobrenome() + "(" + colocado.getPiloto().getEquipe().getNome() + ") : "
		    + colocado.getTotalPontos() + " pontos\n");
	}
	return builder.toString();
    }

}
